import { decrypt, encrypt } from '../crypto'

//加密密钥，默认为空字符串，代表不加密，localstorage中存储明文。注意：更改密钥会导致之前的数据解析失败！！！
const cryptoSecret = ''
//如果想加密，可以对cryptoSecret赋值。或者解开下方注释，使用配置文件中的密钥
// import { getServiceEnvConfig } from '~/.env-config'
// const { cryptoSecret } = getServiceEnvConfig(import.meta.env)
function createSessionStorage(): SessionStg {
    /**
     * 设置sessionStorage缓存
     * @param key
     * @param value
     */
    function set<K, V>(key: K, value: V) {
        const json = encrypt(value, cryptoSecret)
        sessionStorage.setItem(key as string, json)
    }

    /**
     * 根据key获取sessionStorage缓存
     * @param key
     */
    function get<K, V>(key: K) {
        const json = sessionStorage.getItem(key as string)
        let data: V | null = null
        if (json) {
            try {
                data = decrypt(json, cryptoSecret)
            } catch {
                // 防止解析失败
            }
        }
        return data
    }

    /**
     * 根据key删除sessionStorage缓存
     * @param key
     */
    function remove(key: string) {
        window.sessionStorage.removeItem(key)
    }

    /**
     * 清空所有sessionStorage
     */
    function clear() {
        window.sessionStorage.clear()
    }

    return {
        set,
        get,
        remove,
        clear
    }
}

export const sessionStg = createSessionStorage()
